package cn.xz.gobang.util

import android.content.ContentValues.TAG
import android.util.Log
import cn.xz.gobang.bean.ClickData
import java.util.*
import kotlin.Comparator
import kotlin.collections.ArrayList

/**
 * 机器人*/
object RoBotUtils {

    private var mData0: ArrayList<ClickData> = arrayListOf() //黑棋所落
    private var mData1: ArrayList<ClickData> = arrayListOf() //白旗所落

    //going-难度 0-低，1-中，2-高，type-类型， data-已下合集
    fun go(going: Int,type: Int,mData: ArrayList<ClickData>): ClickData?{
        var mReturnData: ClickData? = null
        // 根据下标从小到大排序
        /*Collections.sort(mData, Comparator<ClickData> { p1, p2 ->
            p1.position - p2.position
        })*/
        //区分黑棋白旗
        mData0.clear()
        mData1.clear()
        mData.forEach {
            if (it.type == 0){
                mData0.add(it)
            }else{
                mData1.add(it)
            }
        }
        var mTypeData = mData0
        if (type == 0){
            mTypeData = mData1
        }
        when(going){
            0->{
                //低
                mReturnData = doIt0(type,mTypeData,mData)
            }
            1->{
                //中
            }
            2->{
                //高

            }
        }
        Log.e(TAG, "doIt0: 返回---->${mReturnData?.position}")
        return mReturnData
    }


    //低级难度
    //在对方下棋的周围选一个
    private fun doIt0(type: Int,mTypeData: ArrayList<ClickData>,mData: ArrayList<ClickData>): ClickData?{
        var mReturnData: ClickData? = null
        val position = getNum(mTypeData[mTypeData.size-1].position,mData)
        mReturnData = ClickData(type,position)
        Log.e(TAG, "doIt0: 没问题  ---->${position}")
        return mReturnData
    }

    //获取随机数
    private fun getNum(i: Int,mData: ArrayList<ClickData>): Int{
        val mInter: ArrayList<Int> = arrayListOf()
        if (i-1 > 0 && !hasData(i-1,mData)){
            mInter.add(i-1)
        }
        if (i+1 < 225 && !hasData(i+1,mData)){
            mInter.add(i+1)
        }
        if (i-14 > 0 && !hasData(i-14,mData)){
            mInter.add(i-14)
        }
        if (i-15 > 0 && !hasData(i-15,mData)){
            mInter.add(i-15)
        }
        if (i-16 > 0 && !hasData(i-16,mData)){
            mInter.add(i-16)
        }
        if (i+14 < 225 && !hasData(i+14,mData)){
            mInter.add(i+14)
        }
        if (i+15 < 225 && !hasData(i+15,mData)){
            mInter.add(i+15)
        }
        if (i+16 < 225 && !hasData(i+16,mData)){
            mInter.add(i+16)
        }
        val p =  Random().nextInt(mInter.size)
        return mInter[p]
    }

    //判断该数字是否有棋子了
    private fun hasData(n: Int,mData: ArrayList<ClickData>): Boolean{
        var mR = false
        mData.forEach {
            if (!mR){
                if (it.position == n){
                    mR = true
                    return@forEach
                }
            }
        }
        return mR
    }
}